"""
python里面有3类方法
1、实例方法（instance method）：实例方法会把调用它的对象作为第一个变量传递回方法里面，这个变量叫做self
2、类方法
3、静态方法

"""

class Person:
    name = 'aa'
    def intro(self):
        print(self)
        self.age = self.age+1
        print(self.age)

    # def intro2():
    #     pass

    @classmethod
    def leifangfa(cls):
        print("这是一个类方法",cls)

    # @classmethod
    # def leifangfa2():
    #     pass

    @staticmethod
    def jtff(a):
        print("这是一个静态方法",a)


p = Person()
print(f"--------------- {p}")
p.age = 18
p.intro()
#实例方法只能被对象所调用
# Person.intro()

"""
TypeError: Person.intro2() takes 0 positional arguments but 1 was given
Person.intro2方法需要0个变量但是你给了1个变量
当你用对象去调用方法的时候，这个对象会被默认当成参数传递进方法里面
"""
# p.intro2()

print(f"--------------- {Person}")
p.leifangfa()
Person.leifangfa()
# Person.leifangfa2()
"""
类方法也会默认传递一个参数给这个方法。如果你用一个对象去调用一个类方法，那么这个对象不重要，谁创建的这个对象很重要
类方法只关注哪一个类创建出这个对象，这个变量会被cls（class）所代替。
"""

"""
为什么需要静态方法？
很多方法不需要创建对象就可以运行，这种情况下，可以运行的方法称为静态方法
静态方法也可以用一个对象或者一个类去调用它。
"""
Person.jtff(123)
p.jtff(666)